home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / SDG (ES).ifs < prev    next >
Text File  |  2005-05-26  |  17KB  |  595 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=cross-syl
  8. Title=SDG (ES)
  9. Description=Movie importation script for SDG
  10. Site=http://www.sdg-es.com
  11. Language=ES
  12. Version=1.0
  13. Requires=3.5.0
  14. Comments=
  15. License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.|
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program SDG;
  23.  
  24. const
  25.   SearchBaseURL = 'http://www.sdg-es.com/web/index.php?module=dp_Elinks&func=buscar&buscar=';
  26.   SearchPostFix = '&stype=tit'; 
  27.   BaseURL1 = 'http://www.sdg-es.com/web/';
  28.   BaseURL2 = 'http://www.sdg-es.com';
  29.  
  30. var
  31.   MovieName: string;
  32.   MovieURL: string;
  33. //------------------------------------------------------------------------------------
  34.  
  35. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  36. var
  37.   i: Integer;
  38. begin
  39.   Result := -1;
  40.   if StartAt < 0 then
  41.     StartAt := 0;
  42.   for i := StartAt to List.Count-1 do
  43.     if Pos(AnsiUpperCase(Pattern), AnsiUpperCase(List.GetString(i))) <> 0 then
  44.     begin
  45.       Result := i;
  46.       Break;
  47.     end;
  48. end;
  49. //------------------------------------------------------------------------------------
  50.  
  51. function TextBetween(var S: string; StartTag: string; EndTag: string): string;
  52. var
  53.   InitialPos: Integer;
  54.   longEnd: Integer;
  55. begin
  56.   InitialPos := Pos(StartTag, S);
  57.   Delete(S, 1, InitialPos + Length(StartTag) - 1);
  58.   if( Length(EndTag)>0) then
  59.   begin
  60.     InitialPos := Pos(EndTag, S);
  61.     result := copy(S, 1, InitialPos - 1);
  62.     Delete(S, 1, InitialPos + 1);
  63.   end else
  64.   begin
  65.     result := copy(S, 1, Length(S));
  66.   end
  67. end;
  68. //------------------------------------------------------------------------------------
  69.  
  70. //------------------------------------------------------------------------------------
  71.  
  72. function RemoveDot(S: string): string;
  73. var
  74.   long, posDot: Integer;
  75.  
  76. begin
  77.   long := Length(S);
  78.   posDot := Pos('.',S);
  79.   
  80.   if(posDot=long) then
  81.   begin
  82.     result := copy(S, 1, long-1);
  83.   end else
  84.   begin
  85.     result := copy(S, 1, long);
  86.   end
  87. end;
  88. //------------------------------------------------------------------------------------
  89. procedure AnalyzeMultiplePages(AddressIni: string);
  90. var
  91.   Page, PageTemp: TStringList;
  92.   LineNr: Integer;
  93.   Line, LineAux: string;
  94.   MovieTitle, MovieAddress: string;
  95.   Elementos: Integer;
  96.   Item: string;
  97.   morePages: Boolean;
  98.   AddressTemp: string;
  99.   numPage: string;
  100.  
  101. begin
  102.   Page := TStringList.Create;
  103.   Page.Text := GetPage(AddressIni);
  104.   if Pos('<title>SDG-ES.com', Page.Text) = 0 then
  105.   begin
  106.     ShowMessage('No se ha podido establecer la conexion.');
  107.   end else
  108.   begin
  109.     Elementos := 0;
  110.     PickTreeClear;
  111.     LineNr := FindLine('startnum=', Page, 0);
  112.     if (LineNr <> -1) then   // Multiples paginas
  113.     begin
  114.       Line := Page.GetString(LineNr);
  115.       LineAux := TextBetween (Line, '"pn-normal"', '  ');
  116.       morePages := true;
  117.       repeat
  118.           if(pos('href="',LineAux)>0) then
  119.           begin
  120.             AddressTemp := TextBetween (LineAux, 'href="', '">');
  121.             HTMLDecode(AddressTemp);
  122.             if (Pos('=1',AddressTemp) = Length(AddressTemp)-1) then
  123.             begin
  124.               PageTemp := Page;
  125.             end
  126.             else
  127.             begin
  128.               PageTemp := TStringList.Create;
  129.             end
  130.             Elementos := AnalyzePage(BaseURL2+AddressTemp, Elementos, PageTemp);
  131.           end else
  132.           begin
  133.             morePages := false;
  134.           end
  135.        until not(morePages);
  136.     end else                        // Una sola pagina
  137.     begin
  138.       Elementos := AnalyzePage(AddressIni, Elementos, Page);
  139.     end
  140.   end
  141.   if(Elementos=0) then
  142.   begin
  143.     ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
  144.   end else
  145.   begin
  146.     if PickTreeExec(AddressIni) then
  147.       AnalyzeMoviePage(AddressIni);
  148.   end;
  149.   Page.Free;
  150. end;
  151. //------------------------------------------------------------------------------------
  152.  
  153. function AnalyzePage(AddressPage: string; num_elem: Integer; PageAux: TStringList): Integer;
  154. var
  155.   Page: TStringList;
  156.   LineNr: Integer;
  157.   Line: string;
  158.   MovieTitle, MovieAddress: string;
  159.   Elementos: Integer;
  160.  
  161. begin
  162.   if(pageAux.Count=0) then
  163.   begin
  164.     Page := TStringList.Create;
  165.     Page.Text := GetPage(AddressPage);
  166.   end else
  167.   begin
  168.      Page := PageAux;
  169.   end
  170.   
  171.   if Pos('<title>SDG-ES.com', Page.Text) = 0 then
  172.   begin
  173.     ShowMessage('No se ha podido establecer la conexion.');
  174.   end else
  175.   begin
  176.     Elementos := num_elem;
  177.     LineNr := FindLine('<!--( Elementos )-->', Page, 0);
  178.     LineNr := LineNr + 1;
  179.     Line := Page.GetString(LineNr);
  180.     repeat
  181.       if(pos('- <a href="',Line)>0) then
  182.       begin
  183.         MovieAddress := TextBetween (Line, '<a href="', '">');
  184.         MovieTitle := TextBetween (Line, '', '</a>');
  185.         HTMLDecode(Movietitle);
  186.         PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
  187.         Elementos := Elementos +1;
  188.       end 
  189.         LineNr := LineNr + 1;
  190.         Line := Page.GetString(LineNr);
  191.     until Pos('<!--( Paginacion y hooks )-->', Line) > 0;
  192.  
  193.   end;
  194.   result := Elementos;
  195. end;
  196. //------------------------------------------------------------------------------------
  197.  
  198. procedure AnalyzeMoviePage(Address: string);
  199. var
  200.   Page: TStringList;
  201.   LineNr, LineNrAux, aux, numCds, found, multiplier: Integer;
  202.   Size, SizeLimit: Double;
  203.   Line: string;
  204.   Item: string;
  205.   Comments: string;
  206.   Actors: string;
  207.   Description: string;
  208.   isDual, isSubtitExt, isSonidoExt: Boolean;
  209.   Idiomas: string;
  210.   Subtit: String;
  211.   strAux: string;
  212.   delimiter: string;
  213.   SonidoExt: string;
  214.   TitOriginal: string;
  215.  
  216. begin
  217.   Comments := '';
  218.   Actors := '';
  219.   Description := '';
  220.  
  221.   // URL
  222.   SetField(fieldURL, Address);
  223.  
  224.   Page := TStringList.Create;
  225.   Page.Text := GetPage(Address);
  226.  
  227.   // Titulo traducido
  228.   LineNr := FindLine('<!--( Elemento )-->', Page, 0);
  229.   LineNr := LineNr + 10;
  230.   Line := Page.GetString(LineNr);
  231.   if Pos('<img src', Line) > 0 then
  232.   begin
  233.     Item := TextBetween (Line, '<b>', ' <img');
  234.   end else
  235.     Item := TextBetween (Line, '<b>', '</b>');
  236.   begin
  237.   end
  238.   HTMLDecode(Item);
  239.   TitOriginal := AnsiMixedCase(AnsiLowerCase(Trim (Item)),' ');
  240.   SetField(fieldTranslatedTitle, TitOriginal);
  241.  
  242.   // Picture
  243.   LineNr := LineNr + 9;
  244.   Line := Page.GetString(LineNr);
  245.   Item := TextBetween (Line, '<img src="', '" align');
  246.   GetPicture (BaseURL2 + Item);
  247.  
  248.   // Descripcion
  249.   LineNrAux := FindLine('Descripci≤n:', Page, LineNr);
  250.   if (LineNrAux <> -1) then
  251.   begin
  252.     LineNr := LineNrAux;
  253.     Line := Page.GetString(LineNr);
  254.     Item := TextBetween (Line, '<br>', '');
  255.     HTMLDecode(Item);
  256.     SetField(fieldDescription, Trim (Item));
  257.   end
  258.  
  259.   // Titulo original
  260.   LineNrAux := FindLine('Tφtulo original:', Page, LineNr);
  261.   if (LineNrAux <> -1) then
  262.   begin
  263.     LineNr := LineNrAux;
  264.     Line := Page.GetString(LineNr);
  265.     Item := TextBetween (Line, '</b>', '');
  266.     HTMLDecode(Item);
  267.     SetField(fieldOriginalTitle, RemoveDot(Trim (Item)));
  268.   end else
  269.   begin
  270.     SetField(fieldOriginalTitle, TitOriginal);
  271.   end
  272.   
  273.  
  274.   // Direccion
  275.   LineNrAux := FindLine('Direcci≤n:', Page, LineNr);
  276.   if (LineNrAux <> -1) then
  277.   begin
  278.     LineNr := LineNrAux;
  279.     Line := Page.GetString(LineNr);
  280.     Item := TextBetween (Line, '</b>', '');
  281.     HTMLDecode(Item);
  282.     SetField(fieldDirector, RemoveDot(Trim (Item)));
  283.   end
  284.  
  285.   // Interpretacion
  286.   LineNrAux := FindLine('Interpretaci≤n:', Page, LineNr);
  287.   if (LineNrAux <> -1) then
  288.   begin
  289.     LineNr := LineNrAux;
  290.     Line := Page.GetString(LineNr);
  291.     Item := TextBetween (Line, '</b>', '');
  292.     HTMLDecode(Item);
  293.     SetField(fieldActors, RemoveDot(Trim (Item)));
  294.   end else
  295.   begin
  296.     LineNrAux := FindLine('IntΘrpretes:', Page, LineNr);
  297.     if (LineNrAux <> -1) then
  298.     begin
  299.       LineNr := LineNrAux;
  300.       Line := Page.GetString(LineNr);
  301.       Item := TextBetween (Line, '</b>', '');
  302.       HTMLDecode(Item);
  303.       SetField(fieldActors, RemoveDot(Trim (Item)));
  304.   end
  305.   end
  306.  
  307.   // Genero
  308.   LineNrAux := FindLine('GΘnero:', Page, LineNr);
  309.   if (LineNrAux <> -1) then
  310.   begin
  311.     LineNr := LineNrAux;
  312.     Line := Page.GetString(LineNr);
  313.     Item := TextBetween (Line, '</b>', '');
  314.     HTMLDecode(Item);
  315.     SetField(fieldCategory, RemoveDot(Trim (Item)));
  316.   end
  317.  
  318.   // Duracion
  319.   LineNrAux := FindLine('Duraci≤n:', Page, LineNr);
  320.   if (LineNrAux <> -1) then
  321.   begin
  322.     LineNr := LineNrAux;
  323.     Line := Page.GetString(LineNr);
  324.     Item := TextBetween (Line, '</b>', ' min');
  325.     HTMLDecode(Item);
  326.     SetField(fieldLength, Trim (Item));
  327.   end
  328.  
  329.   // Pais
  330.   LineNrAux := FindLine('Paφs:', Page, LineNr);
  331.   if (LineNrAux <> -1) then
  332.   begin
  333.     LineNr := LineNrAux;
  334.     Line := Page.GetString(LineNr);
  335.     Item := TextBetween (Line, '</b>', '');
  336.     HTMLDecode(Item);
  337.     SetField(fieldCountry, RemoveDot(Trim (Item)));
  338.   end
  339.   
  340.   // Year
  341.   LineNrAux := FindLine('A±o:', Page, LineNr);
  342.   if (LineNrAux <> -1) then
  343.   begin
  344.     LineNr := LineNrAux;
  345.     Line := Page.GetString(LineNr);
  346.     Item := TextBetween (Line, '</b>', '.');
  347.     HTMLDecode(Item);
  348.     SetField(fieldYear, RemoveDot(Trim (Item)));
  349.   end
  350.   
  351.   // Video format
  352.   LineNrAux := FindLine('Video Codec', Page, LineNr);
  353.   if (LineNrAux <> -1) then
  354.   begin
  355.     LineNr := LineNrAux;
  356.     Line := Page.GetString(LineNr);
  357.     Item := TextBetween (Line, '</b>', '');
  358.     HTMLDecode(Item);
  359.     SetField(fieldVideoFormat, Trim (Item));
  360.   end
  361.  
  362.   // Resolucion
  363.   LineNrAux := FindLine('Resoluci≤n:', Page, LineNr);
  364.   if (LineNrAux <> -1) then
  365.   begin
  366.     LineNr := LineNrAux;
  367.     Line := Page.GetString(LineNr);
  368.     Item := TextBetween (Line, '</b>', '');
  369.     HTMLDecode(Item);
  370.     SetField(fieldResolution, Trim (Item));
  371.   end
  372.  
  373.   // Bitrate video
  374.   LineNrAux := FindLine('Bitrate', Page, LineNr);
  375.   if (LineNrAux <> -1) then
  376.   begin
  377.     LineNr := LineNrAux;
  378.     Line := Page.GetString(LineNr);
  379.     Item := TextBetween (Line, '</b>', 'Kbps');
  380.     HTMLDecode(Item);
  381.     SetField(fieldVideoBitrate, Trim (Item));
  382.   end
  383.  
  384.   // Audio
  385.   isDual := False;
  386.   LineNrAux := FindLine('Audio Codec', Page, LineNr);
  387.   if (LineNrAux <> -1) then
  388.   begin
  389.     LineNr := LineNrAux;
  390.     Line := Page.GetString(LineNr);
  391.     if (pos('Audio Codec:',Line)>0) then    // Un solo codec
  392.     begin
  393.       Item := TextBetween (Line, '</b>', '');
  394.       HTMLDecode(Item);
  395.       SetField(fieldAudioFormat, Trim (Item));
  396.       // Bitrate Audio
  397.       LineNrAux := FindLine('Bitrate:', Page, LineNr);
  398.       if (LineNrAux <> -1) then
  399.       begin
  400.         LineNr := LineNrAux;
  401.         Line := Page.GetString(LineNr);
  402.         Item := TextBetween (Line, '</b>', 'Kbps');
  403.         HTMLDecode(Item);
  404.         SetField(fieldAudioBitrate, Trim (Item));
  405.       end
  406.     end
  407.     else begin        // Varios codecs
  408.       isDual := True;
  409.       Idiomas := '';
  410.       Item := '';
  411.       Item := Item + Trim(TextBetween (Line, 'Codec ', ':'));
  412.       Idiomas := Idiomas + Item;
  413.       Item := Item + ' ' + Trim(TextBetween (Line, '</b>', ''));
  414.       // Bitrate Audio
  415.       LineNrAux := FindLine('Bitrate:', Page, LineNr);
  416.       if (LineNrAux <> -1) then
  417.       begin
  418.         LineNr := LineNrAux;
  419.         Line := Page.GetString(LineNr);
  420.         Item := Item + '(' + Trim(TextBetween (Line, '</b>', '')) + ')';
  421.       end
  422.       repeat
  423.         LineNrAux := FindLine('Audio Codec', Page, LineNr);
  424.         if (LineNrAux <> -1) then
  425.         begin
  426.           LineNr := LineNrAux;
  427.           Line := Page.GetString(LineNr);
  428.           strAux := Trim(TextBetween (Line, 'Codec ', ':'));
  429.           Item := Item + '. ' + strAux;
  430.           Idiomas := Idiomas + ', ' + strAux;
  431.           Item := Item + ' ' + Trim(TextBetween (Line, '</b>', ''));
  432.           // Bitrate Audio
  433.           LineNrAux := FindLine('Bitrate:', Page, LineNr);
  434.           if (LineNrAux <> -1) then
  435.           begin
  436.             LineNr := LineNrAux;
  437.             Line := Page.GetString(LineNr);
  438.             Item := Item + '(' + Trim(TextBetween (Line, '</b>', '')) + ')';
  439.           end
  440.         end
  441.       until (LineNrAux = -1);
  442.       HTMLDecode(Item);
  443.       SetField(fieldAudioFormat, Trim (Item));
  444.     end
  445.   end
  446.  
  447.   // Subtitulos forzados
  448.   LineNrAux := FindLine('tulos forzados:', Page, LineNr);
  449.   if (LineNrAux <> -1) then
  450.   begin
  451.     LineNr := LineNrAux;
  452.     Line := Page.GetString(LineNr);
  453.     Item := '';
  454.     Item := Item + AnsiUpFirstLetter(TextBetween (Line, 'tulos ', ':'));
  455.     Item := Item + ' ' + TextBetween (Line, '</b>', '');
  456.     HTMLDecode(Item);
  457.     SetField(fieldSubtitles, Trim (Item));
  458.   end
  459.   else begin
  460.     LineNrAux := FindLine('tulos espa±ol:', Page, LineNr);
  461.     if (LineNrAux <> -1) then
  462.     begin
  463.       LineNr := LineNrAux;
  464.       Line := Page.GetString(LineNr);
  465.       Item := '';
  466.       Item := Item + AnsiUpFirstLetter(TextBetween (Line, 'tulos ', ':'));
  467.       Item := Item + ' ' + TextBetween (Line, '</b>', '');
  468.       HTMLDecode(Item);
  469.       SetField(fieldSubtitles, Trim (Item));
  470.     end
  471.   end
  472.  
  473.   // Idioma
  474.   LineNrAux := FindLine('Idioma', Page, LineNr);
  475.   if (LineNrAux <> -1) then
  476.   begin
  477.     LineNr := LineNrAux;
  478.     Line := Page.GetString(LineNr);
  479.     if (isDual) then
  480.     begin
  481.       Item := Idiomas;
  482.     end
  483.     else begin
  484.       Item := Trim(TextBetween (Line, '/> - ', '</td>'));
  485.     end
  486.     HTMLDecode(Item);
  487.     SetField(fieldLanguages, Trim (Item));
  488.   end
  489.  
  490.   // Tamano archivo y numero cds
  491.   numCds := 0;
  492.   found := 0;
  493.   Size := 0;
  494.   Item := '';
  495.   isSubtitExt := False;
  496.   isSonidoExt := False;
  497.   repeat
  498.     LineNrAux := FindLine('ed2k.gif', Page, LineNr);
  499.     if (LineNrAux <> -1) then
  500.     begin
  501.       LineNr := LineNrAux + 1;
  502.       Line := Page.GetString(LineNr);
  503.       if ((pos('Subtitulos',Line)=0) and (pos('Subtφtulos',Line)=0)
  504.           and (pos('Carßtula',Line)=0) and (pos('Caratula',Line)=0)
  505.           and (pos('Sonido',Line)=0))then
  506.       begin
  507.         LineNr := LineNr + 1;
  508.         Line := Page.GetString(LineNr);
  509.         delimiter := '';
  510.         if (pos('G', Line)>0) then
  511.         begin
  512.           delimiter := 'GB';
  513.         end
  514.         else if (pos('M', Line)>0) then
  515.         begin
  516.           delimiter := 'MB';
  517.         end
  518.         else if (pos('K', Line)>0) then
  519.         begin
  520.           delimiter := 'KB';
  521.         end
  522.         else
  523.           delimiter := '';
  524.         Item := TextBetween (Line, '">', delimiter);
  525.         Size := Size + StrToFloat(Trim(Item));
  526.         numCds := numCds + 1;
  527.       end
  528.       else if ((pos('Subtitulos',Line)>0) or (pos('Subtφtulos',Line)>0)) then
  529.       begin
  530.         isSubtitExt := True;
  531.         Subtit := TextBetween (Line, 'title="','">');
  532.       end
  533.       else if ((pos('Sonido',Line)>0)) then
  534.       begin
  535.         isSonidoExt := True;
  536.         SonidoExt := TextBetween (Line, 'title="','">');
  537.       end
  538.     end
  539.   until (LineNrAux = -1);
  540.   HTMLDecode(Item);
  541.   SizeLimit := 1024;
  542.   if ((delimiter='MB') and (Size > SizeLimit)) then
  543.   begin
  544.     Size := Size / SizeLimit;
  545.     delimiter := 'GB';
  546.     strAux := FloatToSTr(Size);
  547.     Delete(strAux,5,length(strAux)-4);
  548.   end
  549.   else
  550.     strAux := FloatToSTr(Size);
  551.   SetField(fieldSize, StrAux + ' ' + delimiter);
  552.   SetField(fieldDisks, IntToStr(numCds));
  553.     
  554.   // Subtitulos externos
  555.   if (isSubtitExt) then
  556.   begin
  557.     Subtit := 'Fichero aparte (' + Subtit + ')' ;
  558.     HTMLDecode(Item);
  559.     SetField(fieldSubtitles, Trim (Subtit));
  560.   end
  561.  
  562.   // Sonido externo
  563.   if (isSonidoExt) then
  564.   begin
  565.     SonidoExt := GetField(fieldAudioFormat) + '. Fichero aparte (' + SonidoExt + ')' ;
  566.     HTMLDecode(Item);
  567.     SetField(fieldAudioFormat, Trim (SonidoExt));
  568.   end
  569.  
  570.  
  571. end;
  572. //------------------------------------------------------------------------------------
  573. //------------------------------------------------------------------------------------
  574.  
  575. begin
  576.   if CheckVersion(3,5,0) then
  577.   begin
  578.     MovieName := GetField(fieldOriginalTitle);
  579.     if MovieName = '' then
  580.       MovieName := GetField(fieldTranslatedTitle);
  581.     if MovieName <> '' then
  582.     begin
  583.       AnalyzeMultiplePages(SearchBaseURL + UrlEncode(MovieName));
  584.     end
  585.     else if Input('Importar de SDG', 'Introduzca el titulo de la pelicula:', MovieName) then
  586.     begin
  587.       if (Trim(MovieName)<> '') then begin
  588.             AnalyzeMultiplePages(SearchBaseURL + UrlEncode(MovieName));
  589.       end
  590.     end
  591.   end
  592.   else
  593.     ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)');
  594. end. 
  595.